<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="d"></div>
    <script>
    //   var getId = document.getElementById;
    //   getId("d");

      // 此时输出会抛出异常这是因为许多引擎的document.getElementById方法的内部实现中需要用到this。
      // 这个this本来被期望指向document，当getElementById方法作为document对象的属性被调用时，
      // 然而方法内部的this确实是指向document的。

      // 当我们使用普通函数调用的时候，这个时候的this指向的是全局对象的window，而不是document所以抛出异常
      // 所以我们可以尝试用apply方法把document当作this传入这个方法
      document.getElementById = (function (func) {
        return function () {
            console.log(arguments);
            return func.apply(document,arguments)
        }
      })(document.getElementById)

      var getId = document.getElementById
      var div = getId("d")
      console.log(div);
    </script>
  </body>
</html>
